Lucene文档翻译:Lucene 5.3.0示例应用编程接口,Lucene 5.3.0 demo API
demo模块提供的是一些简单的示例代码,用来展示Lucene 的各种特性。
具体:说明
demo模块提供的是一些简单的示例代码,用来展示Lucene 的各种特性。
此文档是一个“入门”向导,用于说明如何使用Lucene自带的示例。它将引导妳完成一些基本的安装及配置过程。
Lucene命令行示例代码中,包含了一个程序,它能够展示Lucene 的各种功能,以及,妳应当如何将Lucene 添加到妳的应用中。
首先,妳应当 下载 最新的Lucene 版本,并且将它解压到一个工作目录中。
妳需要4个JAR文件:Lucene JAR、queryparser JAR、common analysis JAR和Lucene demo JAR。解压了压缩包之后,应当会在core/目录中看到Lucene JAR 文件——它的文件名应当是lucene-core-{version}.jar。妳还应当分别在queryparser、analysis/common/和demo/目录下看到lucene-queryparser-{version}.jar、lucene-analyzers-common-{version}.jar 和lucene-demo-{version}.jar。
将这四个文件放置到妳的Java 类路径(CLASSPATH)中。
到了这个时刻,妳可能已经迫不急待想要动手尝试一番了。让我们来 构建 一个索引!假设妳已经将类路径(CLASSPATH)设置好了,那么,只需要执行以下指令:
java org.apache.lucene.demo.IndexFiles -docs {path-to-lucene}/src
这将会产生一个名为index 的子目录,其中包含着对整个Lucene 源代码的索引。
要 在该索引中进行搜索 ,则执行以下命令:
java org.apache.lucene.demo.SearchFiles
会提示妳输入查询语句。输入一砣乱七八糟的内容(例如:"supercalifragilisticexpialidocious")。妳会发现,在lucene 源代码中,找不到相应的匹配结果。现在,试着输入"string"。那应该会搜索到一堆文档。结果会以10条为单位进行分页显示,妳可以随时要求它显示更多结果。
在本小节,我们会研究一下命令行的Lucene 示例背后的代码:它们在哪里,它们都有哪些组成部分,各个部分都起什么作用。本小节面向的是那些想要在自己应用程序中使用 Lucene 的Java 开发者。
此处所说的文件,都已经生成了对应的文档:
•. IndexFiles.java :这段代码用于创建Lucene 索引。
•. SearchFiles.java :这段代码用于在Lucene 索引中搜索。
前面已经说到过, IndexFiles 这个类是用来创建Lucene 索引的。让我们来详细观摩一下它的工作过程。
main()方法中对命令行参数进行了解析,然后,为了准备实例化 IndexWriter ,做了以下工作:打开一个目录( Directory );实例化一个 StandardAnalyzer 和 IndexWriterConfig 。
命令行参数-index的值,指定的就是,文件系统中用于存放所有索引信息的目录。如果在调用IndexFiles时向-index指定的是一个相对路径,或者根本就未指定-index命令行参数(这将导致使用默 认的相对索引路径"index"),那么,会在当前工作目录中创建(如果它尚未存在的话)一个子目录,以作为索引目录。在某些平台上,索引路径可能会被创建到别的目录中去(例如,用户的家目录)。
命令行参数-docs的值,指定的就是,要对其进行索引的文件所在的目录。
命令行参数-update,表达的意思是,告知IndexFiles,在索引已经存在的情况下,不要删除它。如果未给出-update参数,那么,IndexFiles首先会删除索引目录中的所有内容,再开始索引。
IndexWriter 使用Lucene 的 Directory 对象来存储索引信息。除了我们此处使用的 FSDirectory 之外,还有其它的一些Directory 子类,它们分别可以向内存、数据库等等设备写入索引。
Lucene中的 Analyzer ,是一些处理管道,它们将文本内容打散成索引后的记号(也就是单词),并且按照需要对这些记号做一些额外操作,例如,转换成小写、插入同义词、过滤掉不需要的记号,等等。此处,我们使用的Analyzer是StandardAnalyzer,它按照 统一码标准附录#29 中说明的统一码文本分段算法所规定的单词拆分规则来创建记号;将记号转换成小写;然后过滤掉停止词。停止词,指的是,语言中的一些公共词语,例如冠词(a、an、the,等等)以及其它在搜索过程中起不到什么作用的记号。应当注意,对于每个语言,其规则都是不同的,因此,妳应当针对各个语言使用最适当的分析器。Lucene目前为多种语言都提供了相应的Analyzers(具体阅读lucene/analysis/common/src/java/org/apache/lucene/analysis 中的javadocs)。
IndexWriterConfig实例,储存着针对IndexWriter 的所有配置信息。 例如, 我们根据命令行参数-update的值来确定此处 要使用的OpenMode。
继续看代码,在实例化了IndexWriter之后,能够看到对indexDocs()的调用。这个递归函数,会对待索引的目录进行遍历,并且创建对应的 Document 对象。Document其实是一个狠简单的对象,它表示了文件中的文本内容,以及它的创建时间和位置。这些实例,会被加入到IndexWriter 中。如果指定了-update参数,那么,IndexWriterConfig中的OpenMode就会被设置成 OpenMode.CREATE_OR_APPEND ,于是,就会导致以下的行为:IndexWriter会更新( update )索引中的文档而不是简单地向索引中加入新文档,具体就是,找到一个已经索引并且具有相同标识的文档(在我们的例子中,文件的路径即为标识符),如果找到了就删除它,然后向索引中加入新的文档。
SearchFiles 这个类,狠简单。它主要是与 IndexSearcher 、 StandardAnalyzer (在 IndexFiles 类中也用到了它)和 QueryParser 配套使用。查询解析器,在构造的过程中,需要传入一个分析器,其作用是,按照之前解析文档时相同的方式来对查询语句进行解析:找到词语边界,转换成小写,去掉像'a'、'an'和'the'这样的无用词语。 Query 对象中包含着由 QueryParser 提供的结果,该结果也会被传递给搜索器。注意,也可以不使用查询解析器,直接通过代码来构造一个复杂的 Query 对象。查询解析器,它的作用就是,将 Lucene查询语法 解码成对应的 Query 对象。
SearchFiles会调用 IndexSearcher.search(query,n) 方法,它返回最多n 个相匹配的 TopDocs 。结果会分页显示,并且按照分数(也就是,相关度)排序。
未知美人
Your opinionsHxLauncher: Launch Android applications by voice commands